<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>promise.race的使用</title>
</head>
<body>
    
</body>
<script src="./js/PromiseAjax.js"></script>
<script>
    /*
        复习一下前面promise的接口
            promise.resolve  成功对象的接口 
            promise.reject   失败的接口
            promise.all      传递一个数组对象，这个数组对象存放的也是promise对象  并且只有当子对象都是resolve状态的时候才会有返回值 否则会报错
            promise.allSettled   传递一个数组对象，这个数组对象存放的也都是promise对象， 它不会像promise.all一样那么严格  如果有错它也会一起返回
            
        现在要学习的是  promise.race
            promise.race   也是传递一个数组对象，这个数组对象存放的也都是promise对象， 它的返回原则是对象里面哪个返回的更快 那么最终的返回结果就返回谁
    */
    let promise1 = new Promise((resolve,reject)=>{
        setTimeout(()=>{
            resolve('第一个异步')
        },4000)
    })
    let promise2 = new Promise((resolve,reject)=>{
        setTimeout(()=>{
            resolve('第二个异步')
        },3000)
    })
    // Promise.race 传递数组，谁快就返回谁
    Promise.race([promise1,promise2]).then(res=>{
        console.log(res)
    })

    // 实例：加载案例，如果加载一个数据超过了指定秒就显示返回失败

        // 学习JS一定要多多的学会封装这个概念  因为封装能让我们省很多很多的时间
    function loadmsg(url,time){
        let obj = [
            myajax(url),
            new Promise((resolve,reject)=>{
                setTimeout(()=>{
                    reject('请求超时')
                },time)
            })
        ]
        return Promise.race(obj)
    }
    loadmsg('./js/a.js',0).then(res=>{
        console.log(res)
    }).catch(res=>{
        console.log(res)    
    })
</script>
</html>